Використання сторонніх бібліотек
================================

Yii спочатку спроектований таким чином, щоб використання сторонніх бібліотек
з метою розширення функціоналу Yii, відбувалося легко і невимушено.
Дуже часто при використанні в роботі сторонніх бібліотек, розробники стикаються
з проблемами іменування класів і підключення файлів. Оскільки всі класи Yii мають префікс `C`,
то ймовірність виникнення конфліктів імен істотно нижче.
А завдяки тому, що для підключення файлів Yii використовує
[автозавантаження SPL](http://php.net/manual/en/function.spl-autoload.php),
робота з бібліотеками, що використовують для підключення файлів класів цей механізм
автозавантаження або ж відносний шлях підключення в РНР (PHP include path), стає істотно приємніше.

Нижче наведено приклад, що ілюструє використання в Yii-додатку компонента
[Zend_Search_Lucene](http://www.zendframework.com/manual/en/zend.search.lucene.html)
із [Zend framework](http://www.zendframework.com).

Насамперед, розпаковуємо реліз з Zend framework в папку `protected/vendors`,
де `protected` — це [базова директорія додатку](/doc/guide/basics.application#application-base-directory).
Переконайтеся в тому, що файл `protected/vendors/Zend/Search/Lucene.php` існує.

Далі, на самому початку класу контролера, додаємо рядок:

~~~
[php]
Yii::import('application.vendors.*');
require_once('Zend/Search/Lucene.php');
~~~

Код, наведений вище, підключає файл класу `Lucene.php`.
Оскільки використовується відносний шлях, то необхідно змінити відносний шлях підключення
в РНР (PHP include path) таким чином, щоб додаток міг знайти файл. Р
обиться це шляхом виклику методу `Yii::import` перед `require_once`.

Після того, як зроблено все описане, можна використовувати клас `Lucene` в діях контролера наступним чином:

~~~
[php]
$lucene=new Zend_Search_Lucene($pathOfIndex);
$hits=$lucene->find(strtolower($keyword));
~~~

Підключення бібліотек, що використовують простори імен
------------------------------------------------------

Для того, щоб підключити бібліотеку, що використовує простір імен відповідно до угоди
[PSR-0](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md)
(наприклад, Zend Framework 2 або Symfony2), необхідно зареєструвати її корінь як псевдонім шляху.

У якості прикладу будемо використовувати [Imagine](https://github.com/avalanche123/Imagine).
Якщо ми скопіюємо директорію `Imagine` в `protected/vendors`, то використовувати бібліотеку можна буде наступним чином:

~~~
[php]
Yii::setPathOfAlias('Imagine',Yii::getPathOfAlias('application.vendors.Imagine'));

// Далі стандартний код із керівництва Imagine:
// $imagine = new Imagine\Gd\Imagine();
// і т.д.
~~~

У наведеному вище коді імʼя заданого нами псевдоніма має відповідати першій частині простору імен,
яке використовується в бібліотеці.

Використання сторонніх автозавантажувачів
-----------------------------------------

Деякі сторонні бібліотеки (наприклад PHPUnit) використовують свої власні автозавантажувачі класів,
які виконують підключення файлу класа за правилами, які відрізняються від тих,
що використовуються автозавантажувачем у Yii. Оскільки Yii використовує шлях підключення PHP як "останнє джерело" файлів класів,
реєстрація таких стороннії автозавантажувачів може призвести до Попередження PHP (Warning):
~~~
include(PHPUnit_Framework_TestCase.php) [function.include]: failed to open stream: No such file or directory
~~~
Для уникнення такої проблеми - переконайтеся, що будь-який сторонній автозавантажувач класів
зареєстрований до автозавантажувача Yii:
~~~
[php]
require_once('PHPUnit/Autoload.php'); // реєструємо сторонній автозавантажувач
require_once('/path/to/framework/yii.php'); // реєструємо автозавантажувач Yii
...
~~~
Якщо сторонній автозавантажувач классів йде як окрема функція або метод,
ви можете використовувати `Yii::registerAutoloader()` для його реєстрації.
У цьому випадку Yii зареєструє його перед власним автозавантажувачем автоматично.
~~~
[php]
require_once('/path/to/framework/yii.php'); // реєструємо автозавантажувач Yii
...
Yii::registerAutoloader(array('SomeLibrary','autoload')); // реєструємо сторонній автозавантажувач
...
~~~
Ви також можете уникнути проблем із сторонніми автозавантажувачами,
відключаючи використання шляху підключення PHP перед виконанням додатка за допомогою параметра
`YiiBase::$enableIncludePath` рівним `false`:
~~~
[php]
require_once('/path/to/framework/yii.php');
$configFile='/path/to/config/main.php';
Yii::$enableIncludePath = false; // відключаємо використання шляху підключення PHP
Yii::createWebApplication($configFile)->run();
~~~

Використання Yii у сторонніх системах
-------------------------------------

Yii може бути використаний як бібліотека для розробки і поліпшення сторонніх систем, таких як WordPress,
Joomla та інших. Для того, щоб скористатися Yii необхідно включити наведений нижче код у сторонню систему:

~~~
[php]
require_once('шлях/до/yii.php');
Yii::createWebApplication('шлях/до/config.php');
~~~

Даний код дуже схожий на той, який використовується в `index.php` звичайного додатку.
Відмінність у тому, що після створення екземпляра додатку не викликається метод `run()`.

Тепер при розробці сторонньої системи можна використовувати більшість можливостей Yii.
Наприклад, для отримання доступу до екземпляра додатку можна використовувати `Yii::app()`.
Також можна використовувати DAO, ActiveRecord моделі, валідацію і т.д.